package com.googlecode.gaetwbot.service;

import org.slim3.datastore.Datastore;
import org.slim3.datastore.EntityNotFoundRuntimeException;

import twitter4j.Status;

import com.google.appengine.api.datastore.Key;
import com.googlecode.gaetwbot.model.Mention;

/**
 * {@link Mention}を操作するためのユーティリティ。
 * @author shin1ogawa
 */
public class MentionService {

	private MentionService() {
	}

	/**
	 * {@link Status}から{@link Mention}を作成し、データストアに保存する。
	 * @param status
	 * @return 保存した{@link Mention}の主キー.
	 */
	public static Key put(Status status) {
		Mention mention = new Mention();
		Key key = Datastore.createKey(Mention.class, status.getId());
		mention.setKey(key);
		mention.setCreatedAt(status.getCreatedAt());
		mention.setText(status.getText());
		mention.setUserName(status.getUser().getName());
		mention.setUserScreenName(status.getUser().getScreenName());
		return Datastore.put(mention);
	}

	/**
	 * {@code key}に対応する{@link Mention}を返す。
	 * <p>{@link EntityNotFoundRuntimeException}をcatchさせるより
	 * {@code null}チェックさせる方がわかりやすいかなー？と思っただけ。</p>
	 * @param key
	 * @return {@code key}に対応する{@link Mention}。存在しなければ{@code null}.
	 */
	public static Mention get(Key key) {
		try {
			return Datastore.get(Mention.class, key);
		} catch (EntityNotFoundRuntimeException e) {
			return null;
		}
	}
}
